package demo1;

import java.util.*;

public class Test {
    public static void main1(String[] args) {
        MysingleList list = new MysingleList();
        //list.create();
        list.addFirst(1);
        list.addFirst(1);
        list.addFirst(3);
        list.addFirst(4);
        list.addFirst(5);
        list.addLast(1);
        list.addLast(7);
        list.addLast(8);
        list.addLast(9);
        list.addLast(10);
        list.addIndex(3,88);
        list.addLast(12);
        list.show();
        System.out.println(list.size());
        System.out.println(list.contains(2));
//        list.remove(10);
//        list.show();
        list.removeAllKey(1);//删除所有1
        list.show();
        //list.clear();//清空链表


//        //list.show(list.reverseList(list.head));//这样一样可以进行调用
//        demo1.MysingleList.ListNode reverseHead2=list.reverseList(list.head);//静态内部类方法进行访问
//        //list.show(reverseHead2);//使用了重载的方法进行涵参数的传递,若不这样就以下为主，代码中反转的参数也可去掉
//        list.head=reverseHead2;
//        System.out.println("反转后的链表");
//        list.show();


        MysingleList.ListNode ret=list.middleNode();
        System.out.println("链表中间节点为:"+ret.val);

        int ret1=list.kthToLast(2);
        System.out.println("倒数第2个节点为:"+ret1);

        //小于x的排左边，大于x的排右边，不改变原顺序
        MysingleList.ListNode newHead=list.partition(9);
        list.show(newHead);
    }




    public static MysingleList.ListNode mergeTwoLists(MysingleList.ListNode list1, MysingleList.ListNode list2) {
        //合并两个链表
        MysingleList.ListNode newHead = new MysingleList.ListNode(-1);
        MysingleList.ListNode temp = newHead;
        while(list1!=null && list2!=null){
            if(list1.val<list2.val){
                temp.next=list1;
                list1=list1.next;
            }else{
                temp.next=list2;
                list2=list2.next;
            }
            temp=temp.next;
        }
        if(list1!=null){
            temp.next=list1;
        }
        if(list2!=null){
            temp.next=list2;
        }
        return newHead.next;
    }
    public static void main2(String[] args) {
        MysingleList list1 = new MysingleList();
        MysingleList list2 = new MysingleList();
        list1.addLast(1);
        list1.addLast(1);
        list1.addLast(3);
        list1.addLast(4);
        System.out.println("原链表1:");
        list1.show();
        list2.addLast(1);
        list2.addLast(2);
        list2.addLast(5);
        System.out.println("原链表2:");
        list2.show();
        MysingleList.ListNode ret= mergeTwoLists(list1.head,list2.head);
        System.out.println("合并后链表:");
        list1.show(ret);
        MysingleList list3=new MysingleList();
        list3.addLast(1);
        list3.addLast(2);
//        list3.addLast(3);
//        list3.addLast(3);
        list3.addLast(2);
        list3.addLast(1  );
        boolean RETN=list3.Palindrome();
        if(RETN){
            System.out.println(true);
        }else {
            System.out.println(false);
        }
    }
    public static void creatList(MysingleList.ListNode headA,MysingleList.ListNode headB){
        headB.next.next=headA.next.next;
    }
    public static void main3(String[] args) {
        MysingleList listA = new MysingleList();
        MysingleList listB = new MysingleList();
        listA.addLast(1);
        listA.addLast(2);
        listA.addLast(5);
        listA.addLast(3);
        listA.addLast(7);
        listA.addLast(8);
        System.out.println("原链表A:");
        listA.show();
        listB.addLast(11);
        listB.addLast(13);
        listB.addLast(19);
        listB.addLast(100);
        System.out.println("原链表B:");
        listB.show();
        creatList(listA.head,listB.head);
        System.out.println("AB链表交叉后:");
        listA.show();
        listB.show();
        MysingleList.ListNode ret=MysingleList.getIntersectionNode(listA.head,listB.head);
        if(ret==null){
            System.out.println("没有交点...");
        }else{
            System.out.println("链表交点的叉值为:"+ret.val);
        }
    }

    public static void main4(String[] args) {//判断链表是否成环
        MysingleList listA = new MysingleList();
        listA.addLast(1);
        listA.addLast(2);
        listA.addLast(5);
        listA.addLast(3);
        listA.addLast(7);
        listA.addLast(8);
        listA.creatLoop();//创建环
        System.out.println(listA.hasClcy());//判断环，因为是环无需打印
        System.out.println(listA.hasClcyNode());//当前有环链表的节点
        listA.show();
    }


//    public static void main(String[] args) {
//        Scanner sc=new Scanner(System.in);
//        int a=2;
//        int b=22;
//        int count=0;
//        for(int i=a;i<=b;i++){
//            int m=i;
//            while(m>0){
//                if(m%10==2){
//                    count++;
//                }
//                m=m/10;
//            }
//        }
//        System.out.println(count);
//    }
//public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
//
//    HashSet<Integer> list1=new HashSet<>(nums1);
//    ArrayList<Integer> list2=new ArrayList<>();
//    for(Integer i:nums2){
//        if(list1.contains(i)){
//            list2.add(i);
//        }
//    }
//    return list2;
//}
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String str="abbc";
    LinkedList<Character> list=new LinkedList<>();
    for(int i=0;i<str.length();i++){
        char ch=str.charAt(i);
        list.addLast(ch);
    }
    if(list.isEmpty()){
        return;
    }
    int k=0;
    while(k<list.size()-1){
        if(list.get(k).equals(list.get(k+1))){
            list.remove(k);
            list.remove(k);
            if(k>0){
                k--;
            }
        }else{
            k++;
        }
    }
    if(list.isEmpty()){
        System.out.print(0);
        return;
    }
    for (Character character : list) {
        System.out.print(character);
    }
}
}
